home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
vb4comms
/
dwdcb.cls
< prev
next >
Wrap
Text File
|
1996-03-25
|
10KB
|
352 lines
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "dwDCB"
Attribute VB_Creatable = True
Attribute VB_Exposed = False
' dwDCB - Device Communication Block utility class
' Part of the Desaware API Class Library
' Copyright (c) 1996 by Desaware.
' All Rights Reserved
Option Explicit
Private Type dcbType ' Win32API.TXT is incorrect here.
DCBlength As Long
BaudRate As Long
Bits1 As Long
wReserved As Integer
XonLim As Integer
XoffLim As Integer
ByteSize As Byte
Parity As Byte
StopBits As Byte
XonChar As Byte
XoffChar As Byte
ErrorChar As Byte
EofChar As Byte
EvtChar As Byte
wReserved2 As Integer
End Type
Private DCB As dcbType
Private BufferSize As Integer
Private Const ERR_INVALIDPROPERTY = 31000
Private Const CLASS_NAME$ = "dwDCB"
Private Const FLAG_fBinary& = &H1
Private Const FLAG_fParity& = &H2
Private Const FLAG_fOutxCtsFlow = &H4
Private Const FLAG_fOutxDsrFlow = &H8
Private Const FLAG_fDtrControl = &H30
Private Const FLAG_fDsrSensitivity = &H40
Private Const FLAG_fTXContinueOnXoff = &H80
Private Const FLAG_fOutX = &H100
Private Const FLAG_fInX = &H200
Private Const FLAG_fErrorChar = &H400
Private Const FLAG_fNull = &H800
Private Const FLAG_fRtsControl = &H3000
Private Const FLAG_fAbortOnError = &H4000
Private Declare Function apiSetCommState Lib "kernel32" Alias "SetCommState" (ByVal hCommDev As Long, lpDCB As dcbType) As Long
Private Declare Function apiGetCommState Lib "kernel32" Alias "GetCommState" (ByVal nCid As Long, lpDCB As dcbType) As Long
Private Sub Class_Initialize()
' The structure length must always be set
DCB.DCBlength = Len(DCB)
' Set some default values
BufferSize = 2048
fParity = False
fOutxCtsFlow = True
fOutxDsrFlow = True
fDtrControl = 1
fDsrSensitivity = True
fTXContinueOnXoff = True
fOutX = True
fInX = True
fErrorChar = True
fNull = True
fRtsControl = 1
fAbortOnError = True
DCB.XonLim = 100
DCB.XoffLim = BufferSize - 100
DCB.ByteSize = 8
DCB.Parity = 0
DCB.StopBits = 0
DCB.XonChar = 17
DCB.XoffChar = 19
DCB.ErrorChar = Asc("~")
DCB.EofChar = 26 ' ^Z
DCB.EvtChar = 255
' Set some default value
DCB.BaudRate = 2400
End Sub
Public Property Get BaudRate() As Long
BaudRate = DCB.BaudRate
End Property
Public Property Let BaudRate(vNewValue As Long)
Select Case vNewValue
Case 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200, 128000, 256000
DCB.BaudRate = vNewValue
Case Else
Err.Raise vbObjectError + ERR_INVALIDPROPERTY, CLASS_NAME, "Invalid baud rate"
End Select
End Property
Public Property Get fParity() As Boolean
If DCB.Bits1 And FLAG_fParity Then
fParity = True
End If
End Property
Public Property Let fParity(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fParity)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fParity
End Property
Public Property Get fOutxCtsFlow() As Boolean
If DCB.Bits1 And FLAG_fOutxCtsFlow Then
fOutxCtsFlow = True
End If
End Property
Public Property Let fOutxCtsFlow(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fOutxCtsFlow)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fOutxCtsFlow
End Property
Public Property Get fOutxDsrFlow() As Boolean
If DCB.Bits1 And FLAG_fOutxDsrFlow Then
fOutxDsrFlow = True
End If
End Property
Public Property Let fOutxDsrFlow(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fOutxDsrFlow)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fOutxDsrFlow
End Property
Public Property Get fDtrControl() As Integer
Dim ival&
ival = DCB.Bits1 And FLAG_fDtrControl
fDtrControl = ival \ 16 ' Shift right 4 bits
End Property
' 0 to disable, 1 to enable, 2 for handshake mode
Public Property Let fDtrControl(vNewValue As Integer)
If vNewValue < 0 Or vNewValue > 2 Then
Err.Raise vbObjectError + ERR_INVALIDPROPERTY, CLASS_NAME, "Invalid fDtrControl setting"
End If
DCB.Bits1 = DCB.Bits1 And FLAG_fDtrControl
DCB.Bits1 = DCB.Bits1 Or (vNewValue * 16)
End Property
Public Property Get fDsrSensitivity() As Boolean
If DCB.Bits1 And FLAG_fDsrSensitivity Then
fDsrSensitivity = True
End If
End Property
Public Property Let fDsrSensitivity(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fDsrSensitivity)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fDsrSensitivity
End Property
Public Property Get fTXContinueOnXoff() As Boolean
If DCB.Bits1 And FLAG_fTXContinueOnXoff Then
fTXContinueOnXoff = True
End If
End Property
Public Property Let fTXContinueOnXoff(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fTXContinueOnXoff)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fTXContinueOnXoff
End Property
Public Property Get fOutX() As Boolean
If DCB.Bits1 And FLAG_fOutX Then
fOutX = True
End If
End Property
Public Property Let fOutX(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fOutX)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fOutX
End Property
Public Property Get fInX() As Boolean
If DCB.Bits1 And FLAG_fInX Then
fInX = True
End If
End Property
Public Property Let fInX(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fInX)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fInX
End Property
Public Property Get fErrorChar() As Boolean
If DCB.Bits1 And FLAG_fErrorChar Then
fErrorChar = True
End If
End Property
Public Property Let fErrorChar(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fErrorChar)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fErrorChar
End Property
Public Property Get fNull() As Boolean
If DCB.Bits1 And FLAG_fNull Then
fNull = True
End If
End Property
Public Property Let fNull(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fNull)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fNull
End Property
Public Property Get fRtsControl() As Integer
Dim ival&
ival = DCB.Bits1 And FLAG_fRtsControl
fRtsControl = ival \ &H1000 ' Shift right 4 bits
End Property
Public Property Let fRtsControl(vNewValue As Integer)
If vNewValue < 0 Or vNewValue > 3 Then
Err.Raise vbObjectError + ERR_INVALIDPROPERTY, CLASS_NAME, "Invalid fRtsControl setting"
End If
DCB.Bits1 = DCB.Bits1 And FLAG_fRtsControl
DCB.Bits1 = DCB.Bits1 Or (vNewValue * &H1000)
End Property
Public Property Get fAbortOnError() As Boolean
If DCB.Bits1 And FLAG_fAbortOnError Then
fAbortOnError = True
End If
End Property
Public Property Let fAbortOnError(vNewValue As Boolean)
DCB.Bits1 = DCB.Bits1 And (Not FLAG_fAbortOnError)
If vNewValue Then DCB.Bits1 = DCB.Bits1 Or FLAG_fAbortOnError
End Property
Public Property Get XonLim() As Integer
XonLim = DCB.XonLim
End Property
Public Property Let XonLim(vNewValue As Integer)
DCB.XonLim = vNewValue
End Property
Public Property Get XoffLim() As Integer
XoffLim = DCB.XoffLim
End Property
Public Property Let XoffLim(vNewValue As Integer)
DCB.XoffLim = vNewValue
End Property
Public Property Get ByteSize() As Byte
ByteSize = DCB.ByteSize
End Property
Public Property Let ByteSize(vNewValue As Byte)
If vNewValue < 4 Or vNewValue > 8 Then
Err.Raise vbObjectError + ERR_INVALIDPROPERTY, CLASS_NAME, "Invalid Byte size setting"
End If
DCB.ByteSize = vNewValue
End Property
Public Property Get Parity() As Byte
Parity = DCB.Parity
End Property
' 0 - 4 = No, odd, even, mark, space
Public Property Let Parity(vNewValue As Byte)
If vNewValue < 0 Or vNewValue > 4 Then
Err.Raise vbObjectError + ERR_INVALIDPROPERTY, CL